#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

#define LOG "log.txt"

//系统方案
int main()
{
    //设置权限掩码umask,默认是0002
    umask(0);

    //O_WRONLY | O_CREAT :默认不会对原始文件做清空
    //int fd = open(LOG, O_WRONLY | O_CREAT, 0666);
    //int fd = open(LOG, O_WRONLY | O_CREAT | O_TRUNC, 0666);
    
    //int fd = open(LOG, O_WRONLY | O_CREAT | O_APPEND, 0666);//追加写
    
    int fd = open(LOG, O_RDONLY);
     
    //创建失败返回-1
    if(fd == -1)
    {
        printf("fd: %d, errno: %d, errstring: %s\n",fd, errno,strerror(errno));
    }
    else
    {
        printf("fd: %d, errno: %d, errstring: %s\n",fd,errno, strerror(errno));
    }

    char buffer[1024];

    //读文件
    //这里我们无法做到按行读取，我们是整体读取的
    //做法是将文件中的数据读到缓冲区中，再打印出来
    ssize_t n = read(fd,buffer,sizeof(buffer)-1);//使用系统接口来进行IO的时候，一定要注意\0的问题
    if(n>0)
    {
        buffer[n] = '\0';

        printf("%s\n",buffer);
    }

    //将数据写入文件
    //const char* msg = "bbb";
    //追加"a"
    //const char* msg = "a";
    //int cnt = 5;
    //while(cnt--)
    //{
    //    //定义缓冲区
    //    char line[128];
    //    //将数据格式化写入字符串字符数组中
    //    snprintf(line,sizeof(line),"%s, %d\n",msg,cnt);

    //    write(fd,line,strlen(line));//将缓冲区的数据写入到文件中
    //    //这里的strlen不要+1，\0是C语言的规定，不是文件的规定
    //}

    close(fd);

    return 0;
}
